package core

// import (
// 	"context"
// 	"encoding/binary"
// 	"net"
// )

// // PushClient 用于与Dispatcher建立TCP通道、控制推流
// type PushClient struct {
// 	Addr      string
// 	conn      net.Conn
// 	enco      *transfer
// 	chCode    string
// 	mediaPath string
// 	working   bool
// 	ctx       context.Context
// 	cancel    context.CancelFunc
// }

// func (pc *PushClient) Start(ctx context.Context, cp *channelPair, msg Message) {
// 	if err := pc.Connect(); err != nil {
// 		G.Log.Error("PushClient connect to Dispatcher Error: ", err)
// 		return
// 	}
// 	pc.ctx, pc.cancel = context.WithCancel(ctx)
// 	pc.Send([]byte(pc.chCode))
// 	dataCh := make(chan []byte, 10)
// 	go pc.enco.Encode(pc.ctx, dataCh)
// 	for buf := range dataCh {
// 		if len(buf) > 0 {
// 			// 把ffmpeg转码后的流推送给Dispatcher
// 			length, err := pc.Send(buf)
// 			G.Log.Debug("pcc send:", length)
// 			if err != nil {
// 				G.Log.Error(err)
// 				pc.cancel()
// 				pc.Close()
// 				return
// 			}
// 		}
// 	}
// }

// func (pc *PushClient) Close() {
// 	if pc.conn == nil {
// 		return
// 	}
// 	pc.working = false
// 	(pc.cancel)()
// 	pc.enco.Close()
// 	pc.enco = nil
// 	pc.conn.Close()
// 	pc.conn = nil
// }

// func (pc *PushClient) Connect() (err error) {
// 	pc.conn, err = net.Dial("tcp", pc.Addr)
// 	return
// }

// func (pc *PushClient) Send(data []byte) (n int, err error) {
// 	dataLenBytes := make([]byte, 2)
// 	binary.LittleEndian.PutUint16(dataLenBytes, uint16(len(data)))
// 	n, err = pc.conn.Write(dataLenBytes)
// 	if err != nil {
// 		G.Log.Errorf("Pusher[%s] Send Header Error: %v", pc.chCode, err)
// 		return
// 	}
// 	// G.Log.Debugf("Sent %d bytes", n)
// 	n, err = pc.conn.Write(data)
// 	if err != nil {
// 		G.Log.Errorf("Pusher[%s] Send Data Error: %v", pc.chCode, err)
// 		return
// 	}
// 	// G.Log.Debugf("Sent %d bytes", n)
// 	return
// }
